package stool.juc.callable;

import java.util.concurrent.*;

/**
 java泛型的通配符，其实换成任何字母结果都是一样的，不过约定俗称按照一定的含义就选用这几个字母进行表示了。

 E - Element (在集合中使用，因为集合中存放的是元素) Collection
 T - Type（Java 类） public T Test1(T t){}
 K - Key（键） Map<K,V>
 V - Value（值）
 N - Number（数值类型）List
 ？ - 表示不确定的java类型 List<? super Integer> intgerList;
 * @author Felix
 * @Description
 * @Date 2023-02-19
 */
public class CallableThread {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        MyThread2 myThread2 = new MyThread2();
        // Thread t1 = new Thread(myThread2); ---> Error

        // FutureTask作为桥梁连接Thread和Callable
        FutureTask futureTask = new FutureTask(new MyThread2());
        new Thread(futureTask, "A").start();
        new Thread(futureTask, "B").start();

        // 获取返回值，get放在最后一行是为了计算完再获取值
        System.out.println(futureTask.get());
    }
}

class MyThread implements Runnable{

    @Override
    public void run() {

    }
}

class MyThread2 implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        System.out.println("hello----1024");
        TimeUnit.SECONDS.sleep(4);
        return 1024;
    }
}
